---
description:
  Google Cloud Platform (GCP) is a suite of cloud computing services powered by Google. It is easy
  to use GraphQL Yoga with GCP.
---

import { Callout } from '@theguild/components'

# Integration with Google Cloud Platform

Google Cloud Platform (GCP) is a suite of cloud computing services powered by Google. It is easy to
use GraphQL Yoga with GCP.

## Prerequisites

You will first need to install the GCP command-line tool: `gcloud`.
[You can find instructions here](https://cloud.google.com/sdk/docs/install).

If you already have `gcloud` installed, make sure it is up to date with `gcloud components update`.

[Create a new project](https://cloud.google.com/resource-manager/docs/creating-managing-projects)
and make sure
[billing is enabled](https://cloud.google.com/billing/docs/how-to/verify-billing-enabled).

<Callout type="warning">
  Running these examples requires you to have billing enabled on your GCP account. It should not
  cost more than a few cents, but don't forget to clean up your project after you are done to avoid
  unexpected charges.
</Callout>

## Cloud Functions

Cloud Functions is a serverless execution environment for building and connecting cloud services.
With Cloud Functions, you write simple, single-purpose functions that are attached to events, such
as an HTTP request.

It is probably the most straight forward way to deploy a Yoga server to GCP.

### Installation

```sh npm2yarn
npm i @google-cloud/functions-framework graphql-yoga graphql
```

<Callout type="info">
  Don't forget to add the `main` field to your `package.json`. Google Cloud Functions rely on it to
  know which file to run.
</Callout>

<Callout type="info">
  This example uses ESM syntax, so you should set `"type": "module"` in your `package.json`.
</Callout>

### Usage

```js filename=index.js
import { createSchema, createYoga } from 'graphql-yoga'

export const graphql = createYoga({
  schema: createSchema({
    typeDefs: /* GraphQL */ `
      type Query {
        greetings: String
      }
    `,
    resolvers: {
      Query: {
        greetings: () => 'This is the `greetings` field of the root `Query` type'
      }
    }
  }),
  graphqlEndpoint: '*'
})
```

You can now deploy your function with `gcloud` CLI:

```bash
$ gcloud functions deploy graphql --runtime nodejs18 --trigger-http --allow-unauthenticated
```

You can now test your function by using the URL found in the `httpsTrigger.url` property returned by
the previous command or by using the `gcloud` CLI:

```bash
gcloud functions describe graphql
```

> You can also check a full example on our GitHub repository
> [here](https://github.com/graphql-hive/graphql-yoga/tree/main/examples/gcp)

## Cloud Run

Cloud Run is the Platform as a Service by Google. It is straightforward to use Yoga with it.

### Installation

Create a new Node project and add Yoga to its dependencies.

```sh npm2yarn
npm i graphql-yoga graphql
```

<Callout type="info">
  This example uses ESM syntax, so you should set `"type": "module"` in your `package.json`.
</Callout>

Add a `start` script to your `package.json`. Cloud Run needs to know how to start your application.

```json
{
  "name": "graphql-yoga-cloud-run-guide",
  "version": "1.0.0",
  "type": "module",
  "main": "src/index.js",
  "scripts": {
    "start": "node ."
  },
  "dependencies": {
    "graphql": "^16.6.0",
    "graphql-yoga": "^3.9.1"
  }
}
```

### Usage

Create a GraphQL server with your schema. You can use any HTTP server; here we will use Node's HTTP
implementation.

```js
import { createServer } from 'node:http'
import { createSchema, createYoga } from 'graphql-yoga'

const yoga = createYoga({
  schema: createSchema({
    typeDefs: /* GraphQL */ `
      type Query {
        greetings: String
      }
    `,
    resolvers: {
      Query: {
        greetings: () => 'This is the `greetings` field of the root `Query` type'
      }
    }
  })
})

const server = createServer(yoga)
const port = parseInt(process.env.PORT) || 4000

server.listen(port, () => {
  console.info(`Server is running on http://localhost:${port}${yoga.graphqlEndpoint}`)
})
```

You can now deploy to Cloud Run. You can use all default values, except the last one, which allows
unauthenticated access to your service.

```bash
$ gcloud run deploy --source .
```

<Callout type="info">
  If this is your first time using Cloud Run, enabling the service can take up to a few minutes to
  be fully effective. If you encounter any `403 Forbidden` errors, please wait for 2 minutes and try
  again.
</Callout>

You can now access your API using the URL provided by `gcloud`. The default GraphQL endpoint is
`/graphql`.

If you need to use TypeScript or any other tool that requires a build phase, such as code
generation, add a Dockerfile to the root of your project so that Cloud Run can build a custom image
for you.

> You can also check a full example in our GitHub repository
> [here](https://github.com/graphql-hive/graphql-yoga/tree/main/examples/gcp-cloud-run)
